﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SQLite;
using System.Text;
using BLToolkit.Data;
using BLToolkit.DataAccess;
using PMIS.BLL.System;

namespace PMIS.BLL.Post
{
	/// <summary>
	/// 岗位管理
	/// </summary>
	public class BL_岗位 : BL_Common<岗位>
	{
		/// <summary>
		/// 岗位分类
		/// </summary>
		public static List<string> 岗位分类 = new List<string>(new string[] { "职称", "从业资格", "执业资格", "职业资格", "厂内机动车", "电工", "焊工", "起重", "带电作业", "电工进网", "电力行政执法", "概预算", "计量检定", "用电检查", "油气检查", "管理", "其他人员", "安规100", "安全技能", "三种人" });
		/// <summary>
		/// 保存
		/// </summary>
		/// <param name="item">岗位</param>
		/// <param name="items">岗位_等级</param>
		/// <returns></returns>
		public bool Save(岗位 item, List<岗位_等级> items)
		{
			if (item == null)
				return false;

			bool result = false;
			DbManager dm = null;
			try
			{
				//	创建数据库实例
				dm = BL_DatabaseConnection.CreateConnection();
				//	启动事务
				dm.BeginTransaction();

				#region 记录保存
				SqlQuery<岗位> sq = new SqlQuery<岗位>(dm);
				SqlQuery<岗位_等级> sqi = new SqlQuery<岗位_等级>(dm);
				if (string.IsNullOrEmpty(item.ID))
				{
					//	新增岗位
					item.ID = Guid.NewGuid().ToString("D");
					if (sq.Insert(item) == 0)
						throw new Exception("新增岗位时发生错误:无法保存岗位记录!");

					//	新增岗位等级
					foreach (岗位_等级 level in items)
					{
						level.岗位ID = item.ID;
						if (string.IsNullOrEmpty(level.ID))
							level.ID = Guid.NewGuid().ToString("D");

						if (sqi.Insert(level) == 0)
							throw new Exception("新增岗位时发生错误:无法保存岗位等级记录!");
					}
				}
				else
				{
					//	修改
					if (sq.Update(item) == 0)
						throw new Exception("修改岗位时发生错误:无法保存岗位记录!");

					//	删除原有等级
					dm.SetCommand("DELETE FROM 岗位_等级 T WHERE T.岗位ID = @ID",
						dm.Parameter("ID", item.ID))
						.ExecuteNonQuery();

					//	新增岗位等级
					foreach (岗位_等级 level in items)
					{
						level.岗位ID = item.ID;
						if (string.IsNullOrEmpty(level.ID))
							level.ID = Guid.NewGuid().ToString("D");

						if (sqi.Insert(level) == 0)
							throw new Exception("修改岗位时发生错误:无法保存岗位等级记录!");
					}
				}
				#endregion
			
				//	提交事务
				dm.CommitTransaction();
				result = true;
			}
			catch (Exception ex)
			{
				//	回滚事务
				if (dm != null)
					dm.RollbackTransaction();
				BL_ExceptionOperation.WriteException(ex, dm);
				result = false;
			}
			finally
			{
				if (dm != null)
				{
					dm.Close();
					dm.Dispose();
					dm = null;
				}
			}

			return result;
		}
		/// <summary>
		/// 删除
		/// </summary>
		/// <param name="ID">记录ID</param>
		/// <returns></returns>
		public override bool Delete(string ID)
		{
			if (string.IsNullOrEmpty(ID))
				return false;

			bool result = false;
			DbManager dm = null;
			try
			{
				//	创建数据库实例
				dm = BL_DatabaseConnection.CreateConnection();
				//	启动事务
				dm.BeginTransaction();

				//	删除岗位
				result = new SqlQuery<岗位>(dm).DeleteByKey(ID) > 0;

				//	删除关联的岗位等级
				dm.SetCommand("DELETE FROM 岗位_等级 T WHERE T.岗位ID = @ID",
					dm.Parameter("ID", ID))
					.ExecuteNonQuery();

				//	提交事务
				dm.CommitTransaction();
				result = true;
			}
			catch (Exception ex)
			{
				//	回滚事务
				if (dm != null)
					dm.RollbackTransaction();
				BL_ExceptionOperation.WriteException(ex, dm);
				result = false;
			}
			finally
			{
				if (dm != null)
				{
					dm.Close();
					dm.Dispose();
					dm = null;
				}
			}

			return result;
		}
		/// <summary>
		/// 查询
		/// </summary>
		/// <returns></returns>
		public override List<岗位> GetAll()
		{
			List<岗位> result = null;
			DbManager dm = null;
			try
			{
				//	创建数据库连接
				dm = BL_DatabaseConnection.CreateConnection();

				//	查询
				result = dm.SetCommand("Select U.* From 岗位 U Order By 岗位代码 Asc")
					.ExecuteList<岗位>();
			}
			catch (Exception ex)
			{
				BL_ExceptionOperation.WriteException(ex);
				result = null;
			}
			finally
			{
				if (dm != null)
				{
					dm.Close();
					dm.Dispose();
				}
			}

			return result;
		}
		/// <summary>
		/// 查询
		/// </summary>
		/// <param name="item">查询参数</param>
		/// <param name="pp">分页参数</param>
		/// <returns></returns>
		public List<岗位> Query(岗位 item, ref PagingParameter pp)
		{
			if (item == null)
				return null;

			List<岗位> result = null;
			try
			{
				StringBuilder sb = new StringBuilder();
				List<IDbDataParameter> Params = new List<IDbDataParameter>();
				sb.Append("Select U.* From 岗位 U Where 1=1 ");
				//	岗位代码
				if (!string.IsNullOrEmpty(item.岗位代码))
				{
					sb.Append("And U.岗位代码 Like '%' || @岗位代码 || '%' ");
					Params.Add(new SQLiteParameter("岗位代码", item.岗位代码));
				}
				//	部门
				if (!string.IsNullOrEmpty(item.部门班组ID))
				{
					sb.Append("And U.部门班组ID = @部门班组ID ");
					Params.Add(new SQLiteParameter("部门班组ID", item.部门班组ID));
				}
				//	岗位名称
				if (!string.IsNullOrEmpty(item.岗位名称))
				{
					sb.Append("And U.岗位名称 Like '%' || @岗位名称 || '%' ");
					Params.Add(new SQLiteParameter("岗位名称", item.岗位名称));
				}
				//	是否一线岗位
				if (!string.IsNullOrEmpty(item.是否一线岗位))
				{
					sb.Append("And U.是否一线岗位 = @是否一线岗位 ");
					Params.Add(new SQLiteParameter("是否一线岗位", item.是否一线岗位));
				}
				//	备注
				if (!string.IsNullOrEmpty(item.备注))
				{
					sb.Append("And U.备注 Like '%' || @备注 || '%' ");
					Params.Add(new SQLiteParameter("备注", item.备注));
				}

				//	查询
				result = PageQuery<岗位>(sb.ToString(), Params, ref pp);
			}
			catch (Exception ex)
			{
				BL_ExceptionOperation.WriteException(ex);
				result = null;
			}

			return result;
		}
	}
}